#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
import os
import time
from concurrent.futures import ProcessPoolExecutor


def tesk(res):
    time.sleep(5)
    print("进程: {} 结果: {}".format(os.getpid(), res))
    return res ** 2

def parse(res):
    time.sleep(1)
    print("{} 处理的数据为: {}".format(os.getpid(),res.result()))


if __name__ == '__main__':
    pool = ProcessPoolExecutor(4)
    start = time.time()
    for i in range(1, 5):
        func = pool.submit(tesk, i)
        func.add_done_callback(parse)  # 回调函数,
            # func 添加回调函数,需要有一个返回值 return结果,将其结果丢给另一个函数处理
    pool.shutdown(wait=True)
    stop = time.time()

    print("master: {}, 时间: {}".format(os.getpid(), stop - start))
"""
    # 多进程处理时间为 9.278696298599243, 其每次处理完的结果都会交给主进程来调用
    进程: 42224 结果: 1
    进程: 11764 结果: 2
    进程: 36444 结果: 3
    进程: 25480 结果: 4
    41044 处理的数据为: 1
    41044 处理的数据为: 4
    41044 处理的数据为: 9
    41044 处理的数据为: 16
    master: 41044, 时间: 9.779107809066772
"""